home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / door.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  13KB  |  440 lines

  1. /* Tempest Door Code! */
  2.  
  3. //**********************
  4. //*****  Includes  *****
  5. //**********************
  6.  
  7. #include <proto/all.h>
  8. #include <exec/types.h>
  9. #include <time.h>
  10. #include <stdio.h>
  11. #include <ctype.h>
  12. #include <devices/timer.h>
  13. #include <devices/serial.h>
  14. #include <libraries/dos.h>
  15. #include <intuition/intuition.h>
  16. #include <exec/memory.h>
  17.  
  18. #include <string.h>
  19. #include <tempest/headers.h>
  20.  
  21. #define DROP if(EXIT_FLAG) CloseStuff();
  22.  
  23. //********************
  24. //*****  Void's  *****
  25. //********************
  26.  
  27. void CheckDoor();
  28. int  CheckKey();
  29. void CloseStuff();
  30. void DOORIO();
  31. void getkey(char character[]);
  32. void GetStr(char s[],int opt);
  33. void GetUserTime(char s[]);
  34. int  GetValue(int opt);
  35. void GetWorkDir(char s[]);
  36. int  hotkey(char character[]);
  37. void input(char mstring[],int len);
  38. void LineInput(char ostring[],char mstring[],int len);
  39. void LoadSystemData();
  40. void pl(char outstring[]);
  41. int  Random(int x);
  42. void SetValue(int opt1,int opt);
  43. void showfile(char mstring[]);
  44. void UserTime(int x);
  45. void WriteFile(char ostring[],char mstring[]);
  46. void XmodemDownload(char mstring[]);
  47. void ZmodemDownload(char mstring[]);
  48. void LOG(char outstring[]);
  49. void SLOG(char outstring[]);
  50. void DEBUGLOG(char outstring[]);
  51.  
  52. //*********************
  53. //*****  Structs  *****
  54. //*********************
  55.  
  56. struct MyMessage
  57.  {
  58.   struct Message Msg;
  59.   struct User User;
  60.   char text[255];
  61.   char text1[255];
  62.   int  car,Value,Data;
  63.   long LongValue;
  64.   int  IntValue;
  65.  };
  66.  
  67. struct MsgPort *MyPort = NULL;
  68. struct MyMessage *msg;
  69. struct User User;
  70.  
  71. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,first = 0;
  72. char DOOR_MSG [255],DOOR_MSG1[255],MyName[255],st[100];
  73.  
  74. //************************
  75. //*****  Check Door  *****
  76. //************************
  77.  
  78. void CheckDoor()
  79. { DOOR_DATA=1; strcpy(DOOR_MSG,'\0'); DOORIO(); strcpy(DOOR_MSG,'\0'); }
  80.  
  81. //***********************
  82. //*****  Check Key  *****
  83. //***********************
  84.  
  85. int CheckKey()
  86. { strcpy(DOOR_MSG,'\0'); DOOR_DATA=54; DOOR_VALUE1=0; DOORIO(); return(DOOR_VALUE1); }
  87.  
  88. //*************************
  89. //*****  Close Stuff  *****
  90. //*************************
  91.  
  92. void CloseStuff()
  93. { DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  94.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  95.  if(MyPort) DeletePort(MyPort);
  96.  exit(0L); }
  97.  
  98. //********************
  99. //*****  DoorIO  *****
  100. //********************
  101.  
  102. int DOORIO()
  103. {
  104.  struct MsgPort *HisPort;
  105.  struct MyMessage message;
  106.  int UPDATE;
  107.  if(EXIT_FLAG) return(0);
  108.  UPDATE=0;
  109.  HisPort = FindPort(st);
  110.  if(HisPort!=NULL)
  111.   {
  112.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  113.    message.Msg.mn_Length = sizeof(message);
  114.    message.Msg.mn_ReplyPort = MyPort;
  115.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  116.    message.car   = 0;
  117.    message.Data  = DOOR_DATA;
  118.    message.Value = DOOR_VALUE;
  119.    message.IntValue = DOOR_VALUE1;
  120.    strcpy(message.text,DOOR_MSG);
  121.    strcpy(message.text1,DOOR_MSG1);
  122.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  123.    Wait(1 << MyPort->mp_SigBit);
  124.    GetMsg(MyPort);
  125.    DOOR_DATA  = message.Data;
  126.    DOOR_VALUE = message.Value;
  127.    DOOR_VALUE1 = message.IntValue;
  128.    strcpy(DOOR_MSG,message.text);
  129.    strcpy(DOOR_MSG1,message.text1);
  130.    CopyMem(&message.User,&User,sizeof(struct User));
  131.    first=1;
  132.    UPDATE=0;
  133.    if(message.car) EXIT_FLAG=1;
  134.   }
  135. }
  136.  
  137. //************************
  138. //*****  Door Start  *****
  139. //************************
  140.  
  141. DoorStart(char node[])
  142. {
  143.  struct MsgPort *HisPort;
  144.  EXIT_FLAG = 0;
  145.  sprintf(st,"%s:TEMPEST_DOOR",node);
  146.  HisPort = FindPort(st);
  147.  if(HisPort==NULL) return (FALSE);
  148.  sprintf(MyName,"%s:DOOR_PORT",node);
  149.  MyPort = CreatePort(MyName,0L);
  150.  if(MyPort==NULL)
  151.   {
  152.    puts("Cant Open port");
  153.    return(int)FALSE;
  154.   }
  155.  DOORIO();
  156.  return (int)TRUE;
  157. }
  158.  
  159. //********************
  160. //*****  Editor  *****
  161. //********************
  162.  
  163. void Editor(char Filename[])
  164. { DOOR_DATA=29; strcpy(DOOR_MSG,Filename); DOORIO(); }
  165.  
  166. //*********************
  167. //*****  Get Key  *****
  168. //*********************
  169.  
  170. void getkey(char character[])
  171. { strcpy(DOOR_MSG,'\0'); DOOR_DATA=31; DOORIO(); strcpy(character,DOOR_MSG); }
  172.  
  173. //********************
  174. //*****  GetStr  *****
  175. //********************
  176.  
  177. void GetStr(char s[],int opt)
  178. { DOOR_DATA=15; DOOR_VALUE=opt; strcpy(s,'\0'); DOORIO(); strcpy(s,DOOR_MSG); }
  179.  
  180. //***************************
  181. //*****  Get User Time  *****
  182. //***************************
  183.  
  184. void GetUserTime(char s[])
  185. { DOOR_DATA=14; DOORIO(); strcpy(s,DOOR_MSG); }
  186.  
  187. //***********************
  188. //*****  Get Value  *****
  189. //***********************
  190.  
  191. int GetValue(int opt)
  192. { DOOR_DATA=18; DOOR_VALUE=opt; DOORIO(); return(DOOR_VALUE1); }
  193.  
  194. //********************************
  195. //*****  Get Work Directory  *****
  196. //********************************
  197.  
  198. void GetWorkDir(char s[])
  199. { DOOR_DATA=13; strcpy(s,'\0'); DOORIO(); strcpy(s,DOOR_MSG); }
  200.  
  201. //*********************
  202. //*****  Hot Key  *****
  203. //*********************
  204.  
  205. int hotkey(char character[])
  206. { strcpy(DOOR_MSG,'\0'); DOOR_DATA=20; DOORIO(); strcpy(character,DOOR_MSG);
  207.  return((int)character[0]); }
  208.  
  209. //*******************
  210. //*****  Input  *****
  211. //*******************
  212.  
  213. void input(char mstring[],int len)
  214. { DOOR_DATA=40; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); DOORIO();
  215.  strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  216.  
  217. //************************
  218. //*****  Line Input  *****
  219. //************************
  220.  
  221. void LineInput(char ostring[],char mstring[],int len)
  222. { DOOR_DATA=41; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); strcpy(DOOR_MSG1,ostring);
  223.  DOORIO(); strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  224.  
  225. //******************************
  226. //*****  Load System Data  *****
  227. //******************************
  228.  
  229. void LoadSystemData()
  230. { DOOR_DATA=50; DOORIO(); }
  231.  
  232. //*****************************
  233. //*****  PL (Print Line)  *****
  234. //*****************************
  235.  
  236. void pl(char outstring[])
  237. { DOOR_DATA=1; strcpy(DOOR_MSG,outstring); DOORIO(); }
  238.  
  239. //******************************
  240. //*****  SPL (Print Line)  *****
  241. //******************************
  242.  
  243. void pl(fmt,a1,a2,a3,a4,a5,a6,a7,a8)
  244. char *fmt;
  245.  {
  246.   char s[255];
  247.   sprintf(s,fmt,a1,a2,a3,a4,a5,a6,a7,a8);
  248.   DOOR_DATA=1; strcpy(DOOR_MSG,s); DOORIO();
  249.  }
  250.  
  251. //********************
  252. //*****  Random  *****
  253. //********************
  254.  
  255. int Random(int x)
  256. { DOOR_DATA=26; DOOR_VALUE=x; DOORIO(); return(DOOR_VALUE); }
  257.  
  258. //***********************
  259. //*****  Set Value  *****
  260. //***********************
  261.  
  262. void SetValue(int opt1,int opt)
  263. { DOOR_DATA=17; DOOR_VALUE1 = opt1; DOOR_VALUE=opt; DOORIO(); }
  264.  
  265. //***********************
  266. //*****  Show File  *****
  267. //***********************
  268.  
  269. void showfile(char mstring[])
  270. { DOOR_DATA=30; strcpy(DOOR_MSG,mstring); DOORIO(); }
  271.  
  272. //***********************
  273. //*****  User Time  *****
  274. //***********************
  275.  
  276. void UserTime(int x)
  277. { DOOR_DATA=25; DOOR_VALUE=x; DOORIO(); }
  278.  
  279. //************************
  280. //*****  Write File  *****
  281. //************************
  282.  
  283. void WriteFile(char ostring[],char mstring[])
  284. { DOOR_DATA=16; strcpy(DOOR_MSG,ostring); strcpy(DOOR_MSG1,mstring); DOORIO();
  285.   strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  286.  
  287. //*****************************
  288. //*****  Zmodem Download  *****
  289. //*****************************
  290.  
  291. void ZmodemDownload(char mstring[])
  292. { DOOR_DATA=27; strcpy(DOOR_MSG,mstring); DOORIO(); }
  293.  
  294. //*****************************
  295. //*****  Xmodem Download  *****
  296. //*****************************
  297.  
  298. void XmodemDownload(char mstring[])
  299. { DOOR_DATA=28; strcpy(DOOR_MSG,mstring); DOORIO(); }
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306. //********************************
  307. //*****  LOG (Write to Log)  *****
  308. //********************************
  309.  
  310. void LOG(char outstring[])
  311. { DOOR_DATA=60; strcpy(DOOR_MSG,outstring); DOORIO(); }
  312.  
  313. //***************************************
  314. //*****  SLOG (Write to Sysop Log)  *****
  315. //***************************************
  316.  
  317. void SLOG(char outstring[])
  318. { DOOR_DATA=61; strcpy(DOOR_MSG,outstring); DOORIO(); }
  319.  
  320. //*****************************************
  321. //*****  de_bug (Write to debug Log)  *****
  322. //*****************************************
  323.  
  324. void DEBUGLOG(char outstring[])
  325. { DOOR_DATA=62; strcpy(DOOR_MSG,outstring); DOORIO(); }
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332. //****************************
  333. //**********  Docs  **********
  334. //****************************
  335.  
  336.  
  337. //************************************************************************
  338.        A run down of what the above lines of code actually do.
  339.  
  340. x=DoorStart(node)             - if (x==0) door was ran from cli so exit.
  341.                               - This is your very first call in the door
  342.                               - program, its mandatory or else the bbs
  343.                               - will lock up!!
  344.                               - The Node number is passed by the bbs
  345.                               - so we know what port to open up so if
  346.                               - you run 2 bbs's you don't collide.
  347.  
  348. CloseStuff()                  - Used to tell the BBS were done with the door.
  349.  
  350. x = CheckKey()                - This will not wait for a key to be hit,
  351.                               - hit just simply tells me if there has been
  352.                               - one hit, if so the character will be in
  353.                               - integer form returned via (x) in this example
  354.  
  355. pl(string)                    - Print the following string.
  356.  
  357. GetWorkDir(string)            - The path where to store data files the
  358.                               - sysop has defined.
  359.  
  360. GetUserTime(string)           - A string containg the number of minutes
  361.                               - the user has online.
  362.  
  363. showfile("ram:TextFile")      - It will display a text file.
  364.  
  365.  
  366. hotkey(string)                - The string[0] postion contains the character
  367.                               - the user has typed.
  368.  
  369. getkey(string)                - The string[0] postion contains the character
  370.                               - the user has typed. But also passes the ESC
  371.  
  372. input(string,20)              - Input a line intro string that contains
  373.                               - up to 20 character (MAX 200)
  374.  
  375. LineInput(old,new,40)         - Used for RE-EDITING of a string, place the
  376.                                 old string where the string 'old' is located
  377.                                 and place your string of the new input in
  378.                                 the string is located at 'new' and up to
  379.                                 200 characters can be inputed.
  380.  
  381. GetStr(string,0)              - This would place the path of the BBS into
  382.                                 the string.
  383.  
  384. GetStr(string,1)              - This would place the path of the Accounts.data
  385.                                 file into the string variable.
  386.                          OTHERS:
  387.                         ~~~~~~~~~
  388.          0 - The path the BBS was loaded with.
  389.          1 - The path of the accounts data file.
  390.          2 - The path where the catalog files are kept.
  391.          3 - The path to the temporary directory.
  392.          4 - The path to the Text directory.
  393.          5 - The path to the Describe directory.
  394.          6 - The path to the Voting Dir.
  395.          7 - The path where the optional files are kept.
  396.          8 - The path where the Modules are kept.
  397.          9 - The path where the new user answers are kept.
  398.         10 - The path where sysop uploads are kept.
  399.         11 - The path where the aborted uploads are kept.
  400.         12 - The path where uploads are kept when there being uploaded.
  401.         13 - The path where doors may be kept.
  402.         14 - The path where your log files are kept at.
  403.         15 - Get a full date & time string
  404.         16 - Get the current date
  405.         17 - Get the current time
  406.         18 - Get the system name of the bbs
  407.         19 - The Baud of the online caller.
  408.  
  409. SetValue(1,0)                 - This would make the BBS have a priority of 1
  410.                          OTHERS:
  411.                         ~~~~~~~~~
  412.          0 - BBS Priority
  413.          1 - Ansi ON
  414.          2 - Ansi OFF
  415.  
  416. WriteFile("ram:test","What string to write\n")
  417.                               - This would 'append' or create a new file
  418.                                 called ram:text, and in that file write
  419.                                 a line of text. the '\n' indicates go to
  420.                                 the next line.
  421.  
  422. Random(range)                 - Get a Random number between 0-range;
  423. Editor(Filename)              - Use the BBS editor to write a text file
  424.                                 and save it back as 'Filename'
  425.  
  426. ZmodemDownload("path/filename");
  427.                               - Send a file with zmodem, just send the
  428.                                 complete path.
  429. LoadSystemData()              - Reloads all the BBS data files.
  430. UserTime(time)                - The Number of minutes to ADD
  431.                                 UserTime(15)   add 15 minutes
  432.                                 UserTime(-15)  removed 15 minutes
  433. DROP;                         - Small macro to tell the Door when we have
  434.                                 a dropped carrier to jump to function
  435.                                 ShutDown() which then closes the door.
  436.  
  437. For the latest rundown on how to use the commands, look for my door program
  438. called 'DEMO.c'  it will try to use all of the available commands.
  439. *************************************************************************
  440.